package com.dtp.core.support;

import com.dtp.core.thread.DtpExecutor;
import com.dtp.core.thread.ScheduledDtpExecutor;
import com.dtp.core.thread.EagerDtpExecutor;
import com.dtp.core.thread.OrderedDtpExecutor;
import lombok.Getter;

/**
 * 线程池执行器类型
 *
 * @author yanhom
 * @since 1.0.4
 *
 * @remark muse
 **/
@Getter
public enum ExecutorType {

    // 线程池执行器类型
    COMMON("common", DtpExecutor.class),                // 通用类型动态线程池执行器
    EAGER("eager", EagerDtpExecutor.class),             // 急切类型动态线程池执行器
    SCHEDULED("scheduled", ScheduledDtpExecutor.class), // 计划类型的动态线程池执行器
    ORDERED("ordered", OrderedDtpExecutor.class);       // 有序类型的动态线程池执行器

    private final String name;      // 线程池执行器名称
    private final Class<?> clazz;   // 线程池执行器实现类

    ExecutorType(String name, Class<?> clazz) {
        this.name = name;
        this.clazz = clazz;
    }

    /** 根据名称返回线程池执行器实现类，默认返回DtpExecutor */
    public static Class<?> getClass(String name) {
        for (ExecutorType type : ExecutorType.values())
            if (type.name.equals(name)) return type.getClazz();
        return COMMON.getClazz(); // 默认返回DtpExecutor
    }
}
